package ar.org.sstuyv

import grails.converters.JSON

import java.text.DateFormat

import org.springframework.dao.DataIntegrityViolationException
import org.springframework.web.multipart.commons.CommonsMultipartFile

import ar.org.sstuyv.regularizacion.EstadoDeConsolidacion
import ar.org.sstuyv.regularizacion.IIUURegularizacion
import ar.org.sstuyv.regularizacion.MotivoIURegularizacion
import ar.org.sstuyv.regularizacion.OrigenIURegularizacion

class IIUURegularizacionController {

//    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
	
	def springSecurityService

    def index() {
        redirect(action: "list", params: params)
    }

    def list(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        [IIUURegularizacionInstanceList: IIUURegularizacion.list(params), IIUURegularizacionInstanceTotal: IIUURegularizacion.count()]
    }

    def create() {
        [IIUURegularizacionInstance: new IIUURegularizacion(params)]
    }

//    def save() {
//        def IIUURegularizacionInstance = new IIUURegularizacion(params)
//        if (!IIUURegularizacionInstance.save(flush: true)) {
//            render(view: "create", model: [IIUURegularizacionInstance: IIUURegularizacionInstance])
//            return
//        }
//
//        flash.message = message(code: 'default.created.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), IIUURegularizacionInstance.id])
//        redirect(action: "show", id: IIUURegularizacionInstance.id)
//    }

    def show(Long id) {
        def IIUURegularizacionInstance = IIUURegularizacion.get(id)
        if (!IIUURegularizacionInstance ) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), id])
            redirect(action: "list")
            return
        }

        [IIUURegularizacionInstance: IIUURegularizacionInstance]
    }

    def edit(Long id) {
        def IIUURegularizacionInstance = IIUURegularizacion.get(id)
        if (!IIUURegularizacionInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), id])
            redirect(action: "list")
            return
        }

        [IIUURegularizacionInstance: IIUURegularizacionInstance]
    }

//    def update(Long id, Long version) {
//        def IIUURegularizacionInstance = IIUURegularizacion.get(id)
//        if (!IIUURegularizacionInstance) {
//            flash.message = message(code: 'default.not.found.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), id])
//            redirect(action: "list")
//            return
//        }
//
//        if (version != null) {
//            if (IIUURegularizacionInstance.version > version) {
//                IIUURegularizacionInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
//                          [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion')] as Object[],
//                          "Another user has updated this IIUURegularizacion while you were editing")
//                render(view: "edit", model: [IIUURegularizacionInstance: IIUURegularizacionInstance])
//                return
//            }
//        }
//
//        IIUURegularizacionInstance.properties = params
//
//        if (!IIUURegularizacionInstance.save(flush: true)) {
//            render(view: "edit", model: [IIUURegularizacionInstance: IIUURegularizacionInstance])
//            return
//        }
//
//        flash.message = message(code: 'default.updated.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), IIUURegularizacionInstance.id])
//        redirect(action: "show", id: IIUURegularizacionInstance.id)
//    }

//    def delete(Long id) {
//        def IIUURegularizacionInstance = IIUURegularizacion.get(id)
//        if (!IIUURegularizacionInstance) {
//            flash.message = message(code: 'default.not.found.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), id])
//            redirect(action: "list")
//            return
//        }
//
//        try {
//            IIUURegularizacionInstance.delete(flush: true)
//            flash.message = message(code: 'default.deleted.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), id])
//            redirect(action: "list")
//        }
//        catch (DataIntegrityViolationException e) {
//            flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'IIUURegularizacion.label', default: 'IIUURegularizacion'), id])
//            redirect(action: "show", id: id)
//        }
//    }
	
//	def delete = {
//		def iiuu = IIUURegularizacion.get(params.id)
//		if (iiuu) {
//			try {
//				iiuu.delete(flush: true)
//				render "${message(code: 'default.deleted.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
//			}
//			catch (org.springframework.dao.DataIntegrityViolationException e) {
//				render "${message(code: 'default.not.deleted.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
//			}
//		}
//		else {
//			render "${message(code: 'default.not.found.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
//		}
//	}
	
	def delete(int id)  {
		def iiuu = IIUURegularizacion.get(params.id)
		if (iiuu) {
			try {
				iiuu.delete(flush: true)
				render "${message(code: 'default.deleted.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
			}
			catch (org.springframework.dao.DataIntegrityViolationException e) {
				render "${message(code: 'default.not.deleted.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
			}
		}
		else {
			render "${message(code: 'default.not.found.message', args: [message(code: 'team.label', default: 'Team'), params.id])}"
		}
	}
	def listJSON = {
		
		def sortIndex = params.sidx ?: 'id'
		def sortOrder  = params.sord ?: 'asc'
		//def informes = InformesUrbanisticos.findAll()
		def maxRows = Integer.valueOf(params?.rows)
		def currentPage = Integer.valueOf(params.page) ?: 1
		def rowOffset = currentPage == 1 ? 0 : (currentPage - 1) * maxRows
		
		def informes = IIUURegularizacion.createCriteria().list(max: maxRows, offset: rowOffset) {
			order(sortIndex, sortOrder)
		}
		
		
		def totalRows = informes.totalCount
		def numberOfPages = Math.ceil(totalRows / maxRows)
		
		def results = informes?.collect {
			
			[			
				cell: [it.partido?.nombre,it.barrio?.nombre, it.fecha, it.origen?.nombre, it.motivo?.nombre, 
					it.fecha, it.caracteristicasPredio, it.fechaocupacion,
					it.cantidadAproxFamilias, it.estadoDeConsolidacion?.nombre,
					it.resumenObservacion, it.expediente?.numero, it.nombreArchivo], 
				 id: it.id
			]
		}

		
		def jsonData = [rows: results, page: currentPage, records: totalRows, total: numberOfPages]
		//def jsonData = [rows: results]
		
		render jsonData as JSON
	}
	
	def save = {
		def IIUURegularizacionInstance = new IIUURegularizacion()
		
		DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
		Date date =  df.parse(params.fecha)
		IIUURegularizacionInstance.setFecha(date)
		
		OrigenIURegularizacion origen = OrigenIURegularizacion.findByNombre(params.origen)
		IIUURegularizacionInstance.setOrigen(origen)
		
		MotivoIURegularizacion motivo = MotivoIURegularizacion.findByNombre(params.motivo)
		IIUURegularizacionInstance.setMotivo(motivo)
		
		EstadoDeConsolidacion estado = EstadoDeConsolidacion.findByNombre(params.estadoDeConsolidacion)
		IIUURegularizacionInstance.setEstadoDeConsolidacion(estado)
		
		Partido partido = Partido.findById(params.partido)
		IIUURegularizacionInstance.setPartido(partido)
		
		Barrio barrio = Barrio.findById(params.barrio)
		IIUURegularizacionInstance.setBarrio(barrio)
		
		IIUURegularizacionInstance.setCantidadAproxFamilias(params.cantidadAproxFamilias)
		
		IIUURegularizacionInstance.setCaracteristicasPredio(params.caracteristicasPredio)
		
		Expediente expediente = Expediente.findByNumero(params.expediente)
		IIUURegularizacionInstance.setExpediente(expediente)
		
//		date =  df.parse(params.fechaocupacion)
//		IIUURegularizacionInstance.setFechaocupacion(date)
		
		// FIXME
		Date fechaocupacion =  df.parse(params.fechaocupacion)
		IIUURegularizacionInstance.setFechaocupacion(fechaocupacion)
		
		Date fechaRelevamiento =  df.parse(params.fechaRelevamiento)
		IIUURegularizacionInstance.setFechaRelevamiento(fechaRelevamiento)
		
		IIUURegularizacionInstance.setResumenObservacion(params.resumenObservacion)
		
		def webRootDir = servletContext.getRealPath("/")
		def uploadedFile = request.getFile('archivo')
		IIUURegularizacionInstance.setNombreArchivo(uploadedFile.originalFilename)
		
		IIUURegularizacionInstance.save(failOnError:true, flush:true)
		
		def userDir = new File(webRootDir, 'adjuntos/IIUURegularizacion/'  + IIUURegularizacionInstance.id.toString() )
		userDir.mkdirs()
		uploadedFile.transferTo( new File( userDir,uploadedFile.originalFilename))
		
		render ""
			
	}
	
	def update = {

		def IIUURegularizacionInstance = IIUURegularizacion.get(params.id.toLong())
		if (IIUURegularizacionInstance && !params.oper.equals('del')) {
			if (params.version) {
				def version = params.version.toLong()
				if (IIUURegularizacionInstance.version > version) {
					render "error"
				}
			}

			
			///
			
			DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
			Date date =  df.parse(params.fecha)
			IIUURegularizacionInstance.setFecha(date)
			
			OrigenIURegularizacion origen = OrigenIURegularizacion.findByNombre(params.origen)
			IIUURegularizacionInstance.setOrigen(origen)
			
			MotivoIURegularizacion motivo = MotivoIURegularizacion.findByNombre(params.motivo)
			IIUURegularizacionInstance.setMotivo(motivo)
			
			EstadoDeConsolidacion estado = EstadoDeConsolidacion.findByNombre(params.estadoDeConsolidacion)
			IIUURegularizacionInstance.setEstadoDeConsolidacion(estado)
			
			Partido partido = Partido.findById(params.partido)
			IIUURegularizacionInstance.setPartido(partido)
			
			Barrio barrio = Barrio.findById(params.barrio)
			IIUURegularizacionInstance.setBarrio(barrio)
			
			guardarADisco(params.id, params.archivo)
			
			//IIUURegularizacionInstance.setArchivo(params.archivo)
			
			IIUURegularizacionInstance.setCantidadAproxFamilias(params.cantidadAproxFamilias)
			
			IIUURegularizacionInstance.setCaracteristicasPredio(params.caracteristicasPredio)
			
			Expediente expediente = Expediente.findByNumero(params.expediente)
			IIUURegularizacionInstance.setExpediente(expediente)
			
//			date =  df.parse(params.fechaocupacion)
//			IIUURegularizacionInstance.setFechaocupacion(date)
			
			
			Date fechaocupacion =  df.parse(params.fechaocupacion)
			IIUURegularizacionInstance.setFechaocupacion(fechaocupacion)
			
			Date fechaRelevamiento =  df.parse(params.fechaRelevamiento)
			IIUURegularizacionInstance.setFechaRelevamiento(fechaRelevamiento)
			
			IIUURegularizacionInstance.setResumenObservacion(params.resumenObservacion)
			
			def webRootDir = servletContext.getRealPath("/")
			def uploadedFile = request.getFile('archivo')
			IIUURegularizacionInstance.setNombreArchivo(uploadedFile.originalFilename)
			
			def userDir = new File(webRootDir, 'adjuntos/IIUURegularizacion/'  + IIUURegularizacionInstance.id.toString() )
			userDir.mkdirs()
			uploadedFile.transferTo( new File( userDir,uploadedFile.originalFilename))
			
			if (IIUURegularizacionInstance.save(failOnError:true, flush:true)) {
				render "success"
			}
			else {
				render "error"
			}
		}
		else{
			render "error"
		}
		
		// FIXME si...horrible!
		if (params.oper.equals('del')){
			delete(params.id.toInteger())
		}
	}
	
	def guardarADisco(informeId, archivoMultiparte){
		
//		def userId = getUserId()
//		def userGuid = SecUser.get(userId.id).uid
		
		
	
	}
	
	def fileSave =  {
		
		def uploadedFile = request.getFile('ARCHIVOIIUU')
		if (uploadedFile?.size > 0){
			User user = springSecurityService.getCurrentUser()
			
			def webRootDir = servletContext.getRealPath("/")
			
			def userDir = new File(webRootDir, "/IIUU/" + user?.username + "/" )
			userDir.mkdirs()
			uploadedFile.transferTo( new File( userDir, uploadedFile?.fileItem.fileName))
			
		}
		render ''
}
}
